<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>寄生式继承</h1>
    <p>寄生式继承就是用来解决为原型式继承中返回的对象统一添加方法的问题，是一种在原型式继承模式基础上增强原型对象的增强模式，只是对原型式继承的扩展。</p>
    <p>类似一个工厂模式，工厂内部把原型对象进行构造出另外一个实例，并对构造出来的实例进行增强，最后返回这个实例</p>
    <h2>缺点</h2>
    <p>因为寄生式继承最后返回的是一个对象，如果用一个变量直接来接收它，那相当于添加的所有方法都变成这个对象自身的了，如果创建了多个这样的对象，无法实现相同方法的复用。</p>
    <script>
        // 父类
        function Parent(name) {
            this.name = name;
        }
        // 子类
        function Child() {
            Parent.apply(this, arguments);
        }
        // 继承函数
        function create(obj) {
            function F() { }
            F.prototype = obj;
            return new F();
        }
        // 将子类方法私有化函数
        function creatFunction(obj) {
            // 调用继承函数
            let clone = create(obj);
            // 对新构造出来的对象进行扩展， 子类原型添加方法（多个）
            clone.sayName = function () { };
            clone.sayHello = function () { };
            return clone;
        }

        // 继承
        Child.prototype = creatFunction(Parent.prototype);
    </script>
</body>

</html>